package com.wjjun.base.data.net;

import com.qingmi.farmer.data.model.UploadImgRes;
import com.qingmi.farmer.data.request.LoginByCodeReq;
import com.qingmi.farmer.data.request.LoginReq;
import com.qingmi.farmer.data.response.GetAllGoodsRes;
import com.qingmi.farmer.data.response.GetBannerRes;
import com.qingmi.farmer.data.response.GetBuyerListRes;
import com.qingmi.farmer.data.response.GetGoodsDetailRes;
import com.qingmi.farmer.data.response.GetGoodsOrderListRes;
import com.qingmi.farmer.data.response.GetGoodsTypeRes;
import com.qingmi.farmer.data.response.GetGrainDemandDetailRes;
import com.qingmi.farmer.data.response.GetGrainDemandListRes;
import com.qingmi.farmer.data.response.GetGrainLevelRes;
import com.qingmi.farmer.data.response.GetGrainOrderDetailRes;
import com.qingmi.farmer.data.response.GetGrainOrderListRes;
import com.qingmi.farmer.data.response.GetGrainTypeRes;
import com.qingmi.farmer.data.response.GetHomeDataRes;
import com.qingmi.farmer.data.response.GetNewsListRes;
import com.qingmi.farmer.data.response.GetNoticesRes;
import com.qingmi.farmer.data.response.GetSupplierRes;
import com.qingmi.farmer.data.response.GetTrolleyRes;
import com.qingmi.farmer.data.response.LoginRes;
import com.qingmi.farmer.data.response.UpdateVersionRes;
import com.wjjun.basemvpvm.data.response.SimpleResponse;

import java.util.Map;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.QueryMap;

/**
 * author Wjjun
 * Created 2018/3/20.
 */

public interface HTTPSService {

    /////////////////////////验证码//////////////////////////////

    /**
     * 获取短信验证码
     */
    @GET("basic/sms/getCode")
    Observable<SimpleResponse> getCode(@QueryMap Map<String, String> map);


    /////////////////////////账号//////////////////////////////

    /**
     * 用户登录
     */
    @POST("user/login")
    Observable<LoginRes> login(@Body LoginReq req, @Header("Umeng") String umeng);

    /**
     * 使用验证码登录
     */
    @POST("user/sms/login")
    Observable<LoginRes> loginByCode(@Body LoginByCodeReq req, @Header("Umeng") String umeng);


    /////////////////////////商品//////////////////////////////

    /**
     * 获取全部商品
     */
    @GET("good/goods")
    Observable<GetAllGoodsRes> getGoodsList(@QueryMap Map<String, String> map, @Header("Token") String token);

    /**
     * 获取单个商品详情
     */
    @GET("good/{id}")
    Observable<GetGoodsDetailRes> getGoodsDetail(@Path("id") String id, @Header("Token") String token);

    /**
     * 获取厂商信息
     */
    @GET("good/supplier/suppliers")
    Observable<GetSupplierRes> getSupplier(@QueryMap Map<String, String> map);

    /**
     * 获取商品类型
     */
    @GET("good/goodtype")
    Observable<GetGoodsTypeRes> getGoodsType(@QueryMap Map<String, String> map);


    /////////////////////////粮食//////////////////////////////

    /**
     * 获取粮食类型
     */
    @GET("grain/type")
    Observable<GetGrainTypeRes> getGrainTypeList(@Header("Token") String token);

    /**
     * 获取粮食等级
     */
    @GET("grain/level")
    Observable<GetGrainLevelRes> getGrainLevelList(@Header("Token") String token);

    /**
     * 获取粮食收购商列表
     */
    @GET("grain/buyers")
    Observable<GetBuyerListRes> getBuyerList();

    /////////////////////////粮食订单//////////////////////////////

    /**
     * 获取粮食订单列表
     */
    @GET("grain/order")
    Observable<GetGrainOrderListRes> getGrainOrderList(@QueryMap Map<String, String> map, @Header("Token") String token);

    /**
     * 获取粮食订单详情
     */
    @GET("grain/order/{id}")
    Observable<GetGrainOrderDetailRes> getGrainOrderDetail(@Path("id") String id, @Header("Token") String token);

    /**
     * 收购列表
     */
    @GET("grain/demand")
    Observable<GetGrainDemandListRes> getGrainDemandList(@QueryMap Map<String, String> map, @Header("Token") String token);


    /**
     * 收购详情
     */
    @GET("grain/demand/{id}")
    Observable<GetGrainDemandDetailRes> getGrainDemandDetail(@Path("id") String id, @Header("Token") String token);

    /////////////////////////生资订单//////////////////////////////

    /**
     * 获取生资订单列表
     */
    @GET("good/order")
    Observable<GetGoodsOrderListRes> getGoodsOrderList(@QueryMap Map<String, String> map, @Header("Token") String token);

    /**
     * 获取购物车数据
     */
    @GET("good/shoppingCarts")
    Observable<GetTrolleyRes> getTrolley(@Header("Token") String token);


    ////////////////////////数据//////////////////////////////

    /**
     * 获取首页数据
     */
    @GET("index/info")
    Observable<GetHomeDataRes> getHomeData();

    /**
     * 获取banner
     */
    @GET("basic/banners")
    Observable<GetBannerRes> getBanner();

    /**
     * 上传图片
     */
    @POST("Upload/Image")
    @Multipart
    Observable<UploadImgRes> uploadImg(@Part MultipartBody.Part req, @Header("token") String token);

    /**
     * 检查更新
     */
    @GET("soft/upgrade")
    Observable<UpdateVersionRes> updateVersion();

    ////////////////////////公告//////////////////////////////

    /**
     * 获取多个公告
     */
    @GET("notice/notices")
    Observable<GetNoticesRes> getNotices(@QueryMap Map<String, String> map);


    /////////////////////////新闻//////////////////////////////

    /**
     * 获取多个新闻
     */
    @GET("news/newes")
    Observable<GetNewsListRes> getNewsList(@QueryMap Map<String, String> map);

}
